package es.xpt.ysf.commons.enums.view;

import java.util.Hashtable;
import java.util.List;

import es.xpt.ysf.YSFException;
import es.xpt.ysf.commons.Names;
import es.xpt.ysf.commons.enums.EnumValuesSession;
import es.xpt.ysf.commons.enums.model.EnumName;
import es.xpt.ysf.commons.enums.model.EnumValue;
import es.xpt.ysf.commons.search.model.ItemSearchParams;
import es.xpt.ysf.model.Item;
import es.xpt.ysf.view.LocalDelegate;
import es.xpt.ysf.view.model.UserBean;

public class EnumValueDelegate extends LocalDelegate<EnumValuesSession>{

	public EnumValueDelegate(UserBean user) {
		super(user);
	}
	
	public <E extends Item> List<E> getEntityEnumItems (String entityId, String entity, EnumName enumName, String locale, E type) throws YSFException {
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		return ejb.getEntityEnumItems(entityId, entity, enumName, locale, type);
	}
	
	public List<Item> getEnumValues(String enumName) throws YSFException   {
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		return ejb.getEnumValues(enumName);
	}
	
	public List<EnumValue> getEnumValuesByEntityId(EnumName enumName, String entityId) throws YSFException {
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		return ejb.getEnumValuesByEntityId(enumName, entityId);
	}
	
	public List<Item> getEnumValuesWithoutCache(String enumName) throws YSFException   {
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		return ejb.getEnumValuesWithoutCache(enumName);
	}
	
	public List<Item> getEnumValues(EnumName enumName) throws YSFException {
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		return ejb.getEnumValues(enumName);
	}
	
	public void deleteEnumValue(String id, String locale, String enumName) throws YSFException {
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		ejb.deleteEnumValue(id, locale, enumName);
	}
	
	public List<String> deleteBatchEnumValues(List<Item> listEnumValue, String enumName) throws YSFException{
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		return ejb.deleteBatchEnumValues(listEnumValue, enumName); 
	}
	
	public List<? extends Item> getEnumValueLanguages(String id) throws YSFException {
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		return ejb.getEnumValueLanguages(id);
	}
	
	public List<Item> getEnumValueLanguages(List<String> id) throws YSFException {
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		return ejb.getEnumValueLanguages(id);
	}
	
	public List<EnumValue> getEnumValueLanguage(List<String> id) throws YSFException {
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		return ejb.getEnumValueLanguage(id);
	}
	
	public void insertEnumValue(EnumValue enumValue) throws YSFException {
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		ejb.insertEnumValue(enumValue);
	}
	
	public void insertEnumValueI18n(Item enumValue, String enumName) throws YSFException {
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		ejb.insertEnumValueI18n(enumValue, enumName);
	}
	
	public void updateEnumValue(EnumValue enumValue) throws YSFException {
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		ejb.updateEnumValue(enumValue);
	}
	
	public void updateEnumValueI18n(Item enumValue, String enumName) throws YSFException {
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		ejb.updateEnumValueI18n(enumValue, enumName);
	}
	
	public List<EnumValue> getEnumValuesComplete(String enumValue, String locale) throws YSFException {
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		return ejb.getEnumValuesComplete(enumValue, locale);
	}
	
	public List<EnumValue> getEnumValuesComplete(EnumName enumValue, String locale) throws YSFException {
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		return ejb.getEnumValuesComplete(enumValue, locale);
		
	}
	
	public EnumValue getEnumValueLanguage(String id) throws YSFException {
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		return ejb.getEnumValueLanguage(id);
	}
	
	public void shiftEnumValuesOrders(String enumValueCode, EnumValue one, EnumValue two, String enumName) throws YSFException{
		EnumValuesSession ejb = connect(Names.ENUMVALUES);		
		ejb.shiftEnumValuesOrders(enumValueCode, one, two, enumName);	 
	}
	
	
	public List<Item> searchEnumValues(EnumName enumName, Item params, boolean ascending, boolean startWith) throws YSFException {
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		return ejb.searchEnumValues(enumName, params, ascending, startWith);
	}

	public void updateOrderEnumValueEntity(String enumValueID,String entityID,String entity,Integer order,String tags) throws YSFException {
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		ejb.updateOrderEnumValueEntity(enumValueID,entityID,entity,order,tags);
	} 

	public void addEntityEnumValues(String entityId, String entity, String enumValue,Integer order,String tags) throws YSFException {
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		ejb.addEntityEnumValues(entityId, entity, enumValue,order,tags);
	} 
		
	public void deleteEntityEnumValuesById(String entityId, String entity, String enumValueID) throws YSFException {
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		ejb.deleteEntityEnumValuesById(entityId, entity, enumValueID);
	} 	
	
	public void deleteEntityEnumValues(String entityId, String entity, String nameValue) throws YSFException {
		EnumValuesSession ejb = connect (Names.ENUMVALUES);
		ejb.deleteEntityEnumValues(entityId, entity, nameValue);
	}

	public void updateOrderEnumValueEntityBatch(String enumValue,String entity,List<Item> entityList,Integer begin,Boolean up,Boolean add,Integer increase ) throws YSFException {
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		ejb.updateOrderEnumValueEntityBatch(enumValue,entity,entityList, begin, up, add, increase );
	} 

	public void createBatchEntityOfEnumValues( List<? extends Item> listEntity, String entity, String enumValueID) throws YSFException {
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		ejb.createBatchEntityOfEnumValues(listEntity, entity, enumValueID);
	}	
	public List<EnumValue> searchEnumValuesComplete(EnumName enumName, ItemSearchParams params)
	throws YSFException {
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		return ejb.searchEnumValuesComplete(enumName, params);
	}
	public Hashtable<String,List<EnumValue>> getEntityEnumItems(String entityId, String entity, EnumName enumName,String locale) throws YSFException{
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		return ejb.getEntityEnumItems(entityId, entity, enumName, locale);
	}

	public List<Item> getEnumValueEntities(String enumValueId, String entity) throws YSFException{
		EnumValuesSession ejb = connect(Names.ENUMVALUES);
		return ejb.getEnumValueEntities(enumValueId, entity);
	}
}
